#!/bin/bash
# 该脚本用于实现在 CentOS 中安装社区版的 Docker

# 临时保存并修改语言环境
LANG_temp=$LANG
LANG=zh_CN.UTF-8

# 还原语言环境
function re_lang () {
    # 将语言环境修改回原来的值
    LANG=$LANG_temp
}

# 还原语言环境，并无异常退出
function re_lang_exit () {
    re_lang
    exit 0
}

function success_text () {
    echo -e -n "\033[32m【SUCCESS】\033[0m"
}

function warn_text () {
    echo -e -n "\033[33m【WARN】\033[0m"
}

function error_text () {
    echo -e -n "\033[31m【ERROR】\033[0m"
}


# 会进行访问的文件
centos_release_file=/etc/centos-release

# 判断当前用户是否具有对会进行访问的文件的读权限
if [ ! -r $centos_release_file ]; then
    error_text
    echo "不具有对 $centos_release_file 文件的读权限，无法判断 CentOS 的版本是否满足安装社区版 Docker 的要求"
    re_lang_exit
fi
success_text
echo "具有对 $centos_release_file 文件的读权限"

echo "开始检查 CentOS 的版本是否满足安装社区版 Docker 的要求..."

# 可以安装社区版 Docker 的 CentOS 版本
centos_release_required=("CentOS Stream 9" "CentOS Stream 8" "CentOS 7")

# 判断 CentOS 的版本是否满足安装社区版 Docker 的要求
centos_release=`hostnamectl | grep 'Operating System: \(.*\)'`
centos_release=${centos_release:18} 
idx=-1
for((i=0; i<${#centos_release_required[*]}; i++)); do
    if [[ $centos_release == ${centos_release_required[i]} ]]; then
        idx=$i
        break
    fi
done
if [ $idx -lt 0 ] || [ $idx -ge ${#centos_release_required[*]} ]; then
    error_text
    echo "当前 CentOS 的版本是：$centos_release，不是满足安装社区版 Docker 所需的版本"
    re_lang_exit
fi
success_text
echo "当前 CentOS 的版本是：$centos_release，满足安装社区版 Docker 所需"

# 检查是否具有 yum 工具
is_yum_install=`rpm -q yum | grep '未安装软件包.*'`
if [ ${#is_yum_install} -gt 0 ]; then
    error_text
    echo '当前操作系统中不存在 yum 工具，请先进行 yum 工具的安装，或者使用其他方式进行社区版 Docker 的安装'
    re_lang_exit
fi

# 判断是否为 root 用户
if [ "`whoami`" != "root" ]; then
    # warn_text
    error_text
    echo '当前登陆操作系统的用户不为 root，无法继续进行 Docker 安装'
    # iam=`whoami`
    # if [ -z "`groups $iam | grep 'sudo'`" ]; then
    #     error_text
    #     echo '当前登陆操作系统的用户也不为 sudo 组成员，无法继续进行 Docker 安装'
    # fi
    re_lang_exit
fi

# 使用 yum 卸载旧版本 Docker
# 会一同将 Docker 所依赖的而又不被其他软件包依赖的软件包卸载删除
echo "开始卸载旧版本 Docker..."
yum remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
success_text
echo "卸载旧版本 Docker 完成"

echo "开始进行社区版 Docker 的安装..."

# 安装 yum-utils，yum-utils 是 yum 的工具包集合，由不同的作者开发，其使 yum 使用起来更加方便和强大。
yum install -y yum-utils
# 拉取配置阿里云提供的 Docker 下载安装的 yum 软件包仓库
# 在我们的操作系统本地中添加阿里云提供的 Docker 下载安装的 yum 软件包仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装社区版 Docker
yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 检查社区版 Docker 是否安装成功
is_docker_ce_install=`rpm -q docker-ce | grep '未安装软件包.*'`
if [ ${#is_yum_install} -gt 0 ]; then
    error_text
    echo '社区版 Docker 安装失败，请重新尝试.'
    re_lang_exit
fi

success_text
echo "社区版 Docker 安装完成"
echo "安装的 Docker 版本为："
docker version
echo "Docker 启动中..."
systemctl start docker
echo "开启 Docker 开机自启中..."
systemctl enable docker
echo "当前 Docker 的状态为："
systemctl status docker

re_lang
